package net.courier.remoting;

import java.util.Map;

/**
 * 服务注册器
 * 
 * @author wuqh
 */
public interface ServiceRegistry {
	/**
	 * 绑定一组服务到服务器，如果id已经存在则替换原有组件。
	 * 
	 * @param services
	 *            {key : id , value : target}
	 */
	public void setServices(Map<String, Object> services);

	/**
	 * 绑定一个服务组件到服务器，如果id已经存在则不绑定。
	 * 
	 * @param id
	 *            注册的服务对象id，必须唯一
	 * @param target
	 *            注册的服务对象
	 */
	public void bind(String id, Object target);

	/**
	 * 重新绑定一个服务组件到服务器,如果id已经存在则替换原有组件。
	 * 
	 * @param id
	 *            注册的服务对象id，必须唯一
	 * @param target
	 *            注册的服务对象
	 */
	public void rebind(String id, Object target);

	/**
	 * 取消服务器上绑定的服务组件。
	 * 
	 * @param id
	 *            注册的服务对象id，必须唯一
	 */
	public void unbind(String id);

	/**
	 * 获取服务器上绑定的服务组件。
	 * 
	 * @param id
	 *            注册的服务对象id，必须唯一
	 */
	public <T> T getService(String id);
}